Skip to content

feat(keycard): Add support for keycard channel events#19548

Merged
alexjba merged 10 commits intofix/keycard-nfc-2from
fix/keycard-nfc-3
Jan 14, 2026
Merged

feat(keycard): Add support for keycard channel events#19548
alexjba merged 10 commits intofix/keycard-nfc-2from
fix/keycard-nfc-3

Conversation

@alexjba
Copy link
Copy Markdown
Contributor

@alexjba alexjba commented Dec 10, 2025

What does the PR do

Iterates #19545

The keycard channel events will inform the app of the channel state (waiting for keycard, reading, error, idle). This will be used on mobile platforms to control a drawer that informs the user when it's required to tap the keycard.

status-keycard-qt adds these new events driven by the channel state.

NOTE: Tests can be done in the final PR #19549

@alexjba alexjba requested a review from a team as a code owner December 10, 2025 11:42
@alexjba alexjba requested review from Khushboo-dev-cpp, caybro, iurimatias, micieslak and saledjenic and removed request for a team and iurimatias December 10, 2025 11:42
@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

✔️ status-desktop/e2e/prspr19548 🔹 ~17 min 🔹 86711e0 🔹 📦 tests/e2e package

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@status-im-auto
Copy link
Copy Markdown
Member

@jrainville jrainville linked an issue Dec 10, 2025 that may be closed by this pull request
@alexjba alexjba requested a review from a team as a code owner December 22, 2025 08:41
@status-im-auto
Copy link
Copy Markdown
Member

status-im-auto commented Dec 22, 2025

Jenkins Builds

Click to see older builds (112)
Commit #️⃣ Finished (UTC) Duration Platform Result
86711e0 #1 2025-12-10 11:50:16 ~7 min android/arm64 📄log
86711e0 #1 2025-12-10 11:50:55 ~8 min macos/aarch64-nwaku 📄log
✔️ 86711e0 #1 2025-12-10 11:53:15 ~10 min tests/nim 📄log
86711e0 #1 2025-12-10 11:56:30 ~14 min ios/aarch64 📄log
✔️ 86711e0 #1 2025-12-10 11:57:13 ~14 min tests/ui 📄log
86711e0 #1 2025-12-10 11:57:19 ~14 min windows/x86_64 📄log
✔️ 86711e0 #1 2025-12-10 12:03:39 ~21 min macos/aarch64 🍎dmg
✔️ 86711e0 #1 2025-12-10 12:04:17 ~21 min linux/x86_64 📦tgz
✔️ 86711e0 #1 2025-12-10 12:06:29 ~23 min linux/x86_64-nwaku 📦tgz
✔️ 86711e0 pr19548 2025-12-10 12:21:38 ~17 min tests/e2e 📊rpt
✖️ e71a2fa #2 2025-12-10 16:25:16 ~16 min ios/aarch64 📱ipa
✔️ e71a2fa #2 2025-12-10 16:29:05 ~19 min android/arm64 🤖apk 📲
✔️ e71a2fa #2 2025-12-10 16:31:56 ~22 min tests/nim 📄log
✔️ e71a2fa #2 2025-12-10 16:34:29 ~25 min macos/aarch64 🍎dmg
✔️ e71a2fa #2 2025-12-10 16:35:51 ~26 min macos/aarch64-nwaku 🍎dmg
✔️ e71a2fa #2 2025-12-10 16:39:01 ~29 min tests/ui 📄log
✔️ e71a2fa #2 2025-12-10 16:39:43 ~30 min linux/x86_64 📦tgz
✔️ e71a2fa #2 2025-12-10 16:43:23 ~34 min linux/x86_64-nwaku 📦tgz
✔️ e71a2fa #2 2025-12-10 16:45:14 ~35 min windows/x86_64 💿exe
e71a2fa pr19548 2025-12-10 16:55:23 ~15 min tests/e2e 📄log
✖️ e71a2fa PR19548 2025-12-10 17:12:46 ~27 min tests/e2e-windows 📊rpt
cd46a72 #3 2025-12-11 12:56:59 ~11 min macos/aarch64-nwaku 📄log
✖️ cd46a72 #3 2025-12-11 13:04:26 ~19 min ios/aarch64 📱ipa
✔️ cd46a72 #3 2025-12-11 13:04:35 ~19 min android/arm64 🤖apk 📲
✔️ cd46a72 #3 2025-12-11 13:06:03 ~20 min macos/aarch64 🍎dmg
✔️ cd46a72 #3 2025-12-11 13:09:07 ~24 min tests/nim 📄log
bcf9a24 #4 2025-12-11 13:27:28 ~15 min macos/aarch64-nwaku 📄log
✖️ bcf9a24 #4 2025-12-11 13:28:58 ~17 min ios/aarch64 📱ipa
✔️ bcf9a24 #4 2025-12-11 13:29:18 ~17 min android/arm64 🤖apk 📲
✔️ bcf9a24 #4 2025-12-11 13:33:35 ~21 min macos/aarch64 🍎dmg
✔️ bcf9a24 #4 2025-12-11 13:35:31 ~23 min tests/nim 📄log
✔️ bcf9a24 #4 2025-12-11 13:41:42 ~30 min linux/x86_64-nwaku 📦tgz
✖️ bcf9a24 #4 2025-12-11 13:41:42 ~30 min linux/x86_64 📦tgz
✔️ bcf9a24 #4 2025-12-11 13:42:49 ~31 min tests/ui 📄log
✖️ bcf9a24 #4 2025-12-11 13:58:09 ~46 min windows/x86_64 💿exe
✖️ aab486b #5 2025-12-22 09:04:30 ~22 min ios/aarch64 📱ipa
✔️ aab486b #5 2025-12-22 09:05:45 ~23 min android/arm64 🤖apk 📲
✔️ aab486b #5 2025-12-22 09:09:17 ~26 min macos/aarch64-nwaku 🍎dmg
✔️ aab486b #5 2025-12-22 09:10:04 ~27 min tests/nim 📄log
✔️ aab486b #5 2025-12-22 09:13:33 ~31 min macos/aarch64 🍎dmg
✔️ aab486b #5 2025-12-22 09:15:41 ~33 min tests/ui 📄log
✔️ aab486b #5 2025-12-22 09:19:10 ~36 min linux/x86_64-nwaku 📦tgz
✔️ aab486b #5 2025-12-22 09:22:09 ~39 min linux/x86_64 📦tgz
✔️ aab486b #5 2025-12-22 09:25:12 ~42 min windows/x86_64 💿exe
✔️ aab486b pr19548 2025-12-22 09:38:27 ~16 min tests/e2e 📊rpt
✔️ aab486b PR19548 2025-12-22 09:58:36 ~33 min tests/e2e-windows 📊rpt
668b750 #6 2025-12-22 14:40:09 ~12 min macos/aarch64-nwaku 📄log
✖️ 668b750 #6 2025-12-22 14:43:52 ~16 min ios/aarch64 📱ipa
✔️ 668b750 #6 2025-12-22 14:53:28 ~26 min macos/aarch64 🍎dmg
✔️ 668b750 #6 2025-12-22 14:56:40 ~29 min android/arm64 🤖apk 📲
✔️ 668b750 #6 2025-12-22 15:01:26 ~34 min tests/nim 📄log
✔️ 668b750 #6 2025-12-22 15:07:06 ~39 min tests/ui 📄log
✔️ 668b750 #6 2025-12-22 15:07:43 ~40 min linux/x86_64-nwaku 📦tgz
✔️ 668b750 #6 2025-12-22 15:09:31 ~42 min linux/x86_64 📦tgz
✔️ 668b750 #6 2025-12-22 15:10:42 ~43 min windows/x86_64 💿exe
✔️ 668b750 pr19548 2025-12-22 15:26:08 ~16 min tests/e2e 📊rpt
✖️ 668b750 PR19548 2025-12-22 15:32:30 ~21 min tests/e2e-windows 📊rpt
e2f0b36 #7 2025-12-30 07:47:10 ~8 min android/arm64 📄log
e2f0b36 #7 2025-12-30 07:48:35 ~9 min macos/aarch64-nwaku 📄log
e2f0b36 #7 2025-12-30 07:54:01 ~15 min ios/aarch64 📄log
✔️ e2f0b36 #7 2025-12-30 07:55:41 ~16 min macos/aarch64 🍎dmg
✔️ e2f0b36 #7 2025-12-30 07:56:44 ~17 min tests/nim 📄log
✔️ e2f0b36 #7 2025-12-30 08:01:04 ~22 min tests/ui 📄log
✔️ e2f0b36 #7 2025-12-30 08:05:05 ~26 min linux/x86_64-nwaku 📦tgz
✔️ e2f0b36 #7 2025-12-30 08:05:22 ~26 min linux/x86_64 📦tgz
✔️ e2f0b36 pr19548 2025-12-30 08:22:19 ~16 min tests/e2e 📊rpt
✔️ e2f0b36 #7 2025-12-30 08:28:36 ~49 min windows/x86_64 💿exe
✖️ e2f0b36 PR19548 2025-12-30 08:53:11 ~24 min tests/e2e-windows 📊rpt
✔️ 98d9bc1 #8 2025-12-30 20:11:57 ~11 min android/arm64 🤖apk 📲
✔️ 98d9bc1 #8 2025-12-30 20:12:23 ~11 min tests/nim 📄log
98d9bc1 #8 2025-12-30 20:13:28 ~12 min macos/aarch64-nwaku 📄log
✔️ 98d9bc1 #8 2025-12-30 20:16:15 ~15 min tests/ui 📄log
✔️ 98d9bc1 #8 2025-12-30 20:19:06 ~18 min ios/aarch64 📱ipa 📲
✔️ 98d9bc1 #8 2025-12-30 20:21:59 ~21 min linux/x86_64 📦tgz
✔️ 98d9bc1 #8 2025-12-30 20:22:27 ~21 min linux/x86_64-nwaku 📦tgz
✔️ 98d9bc1 #8 2025-12-30 20:23:22 ~22 min macos/aarch64 🍎dmg
✔️ 98d9bc1 pr19548 2025-12-30 20:40:25 ~18 min tests/e2e 📊rpt
✔️ 98d9bc1 #8 2025-12-30 20:51:05 ~50 min windows/x86_64 💿exe
✖️ 98d9bc1 PR19548 2025-12-30 21:12:02 ~20 min tests/e2e-windows 📊rpt
af922f9 #9 2026-01-12 13:43:02 ~10 min macos/aarch64-nwaku 📄log
✔️ af922f9 #9 2026-01-12 13:44:08 ~11 min android/arm64 🤖apk 📲
✔️ af922f9 #9 2026-01-12 13:51:13 ~18 min macos/aarch64 🍎dmg
✔️ af922f9 #9 2026-01-12 13:53:07 ~20 min ios/aarch64 📱ipa 📲
✔️ af922f9 #9 2026-01-12 13:53:26 ~20 min tests/nim 📄log
✔️ af922f9 #9 2026-01-12 13:57:52 ~24 min tests/ui 📄log
✔️ af922f9 #9 2026-01-12 14:02:32 ~29 min linux/x86_64 📦tgz
✔️ af922f9 #9 2026-01-12 14:03:06 ~30 min linux/x86_64-nwaku 📦tgz
✔️ af922f9 #9 2026-01-12 14:17:53 ~44 min windows/x86_64 💿exe
✔️ af922f9 pr19548 2026-01-12 14:20:04 ~17 min tests/e2e 📊rpt
✖️ af922f9 PR19548 2026-01-12 14:39:42 ~21 min tests/e2e-windows 📊rpt
b8b31ae #10 2026-01-13 09:12:32 ~9 min macos/aarch64-nwaku 📄log
✔️ b8b31ae #10 2026-01-13 09:22:17 ~19 min ios/aarch64 📱ipa 📲
✔️ b8b31ae #10 2026-01-13 09:23:13 ~20 min android/arm64 🤖apk 📲
✔️ b8b31ae #10 2026-01-13 09:25:25 ~22 min tests/nim 📄log
✔️ b8b31ae #10 2026-01-13 09:30:08 ~27 min macos/aarch64 🍎dmg
✔️ b8b31ae #10 2026-01-13 09:32:10 ~29 min tests/ui 📄log
✔️ b8b31ae #10 2026-01-13 09:35:48 ~33 min linux/x86_64-nwaku 📦tgz
✔️ b8b31ae #10 2026-01-13 09:36:02 ~33 min linux/x86_64 📦tgz
✔️ b8b31ae #10 2026-01-13 09:42:39 ~39 min windows/x86_64 💿exe
✔️ b8b31ae pr19548 2026-01-13 09:53:07 ~16 min tests/e2e 📊rpt
✔️ 44d162b #11 2026-01-13 10:13:16 ~16 min ios/aarch64 📱ipa 📲
44d162b #11 2026-01-13 10:16:02 ~18 min macos/aarch64-nwaku 📄log
✔️ 44d162b #11 2026-01-13 10:16:56 ~19 min android/arm64 🤖apk 📲
✔️ 44d162b #11 2026-01-13 10:21:56 ~24 min tests/nim 📄log
✖️ 44d162b PR19548 2026-01-13 10:26:55 ~44 min tests/e2e-windows 📊rpt
✔️ 44d162b #11 2026-01-13 10:27:02 ~29 min tests/ui 📄log
✔️ 44d162b #11 2026-01-13 10:29:33 ~32 min macos/aarch64 🍎dmg
✔️ 44d162b #11 2026-01-13 10:30:08 ~33 min linux/x86_64 📦tgz
✔️ 44d162b #11 2026-01-13 10:30:08 ~33 min linux/x86_64-nwaku 📦tgz
✔️ 44d162b #11 2026-01-13 10:41:38 ~44 min windows/x86_64 💿exe
✔️ 44d162b pr19548 2026-01-13 10:51:00 ~20 min tests/e2e 📊rpt
✖️ 44d162b PR19548 2026-01-13 11:10:22 ~28 min tests/e2e-windows 📊rpt
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 049606b #12 2026-01-14 11:49:57 ~11 min tests/nim 📄log
✔️ 049606b #12 2026-01-14 11:58:02 ~19 min ios/aarch64 📱ipa 📲
✔️ 049606b #12 2026-01-14 11:58:51 ~20 min tests/ui 📄log
✔️ 049606b #12 2026-01-14 11:59:48 ~21 min linux/x86_64-nwaku 📦tgz
✔️ 049606b #12 2026-01-14 11:59:57 ~21 min linux/x86_64 📦tgz
✔️ 049606b #12 2026-01-14 12:01:31 ~23 min macos/aarch64 🍎dmg
✔️ 049606b #12 2026-01-14 12:04:18 ~25 min macos/aarch64-nwaku 🍎dmg
✔️ 049606b #12 2026-01-14 12:21:35 ~43 min windows/x86_64 💿exe

notify = keycardChannelStateChanged

# Constants for channel states (readonly properties for QML)
proc getStateIdle*(self: View): string {.slot.} =
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These read-only constant properties could go to some QML enums, wdyt? Unless you really need them on the NIM side as well

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. I'll update the following PR where I'm actually using these constants.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done! In the following PR here 877f156

The keycard channel events will inform the app of the channel state (waiting for keycard, reading, error, idle). This will be used on mobile platforms to control a drawer that informs the user when it's required to tap the keycard.
…keycard interactions

Adding a `KeycardChannelDrawer` that's guiding the user whenever the keycard is needed.

On IOS the system drawer is used
…ponents

- use a single KeycardStateDisplay instance with the necessary states
- The state queue, transitions and entire logic moved to KeycardChannelStateManager component
- Adding states for HW adaptor states
- Implement `Dismiss` action
…ing blocked

This commit updates parts of the login flows. Adds a new `Scan keycard` button to trigger keycard detection on demand.
+ Update keycard states in the login flow
+ Show digits only on soft keyboard for pin input

to squash - fix: User needs to be able to dismiss the keycard drawer without getting blocked
@alexjba alexjba merged commit 174ea39 into fix/keycard-nfc-2 Jan 14, 2026
1 of 10 checks passed
@alexjba alexjba deleted the fix/keycard-nfc-3 branch January 14, 2026 11:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[MobileParity] Keycard support

4 participants